1. Field of the Invention
The present invention relates to a computer program product, system, and method for sharing alias addresses among logical devices.
2. Description of the Related Art
In certain computing environments, multiple host systems may communicate with multiple control units (CUs) (also known as storage controllers, storage subsystems, enterprise storage servers, etc.) through one or more logical paths providing access to interconnected storage devices, such as hard disk drives or solid state storage drives (SSDs). The interconnected drives may be configured as a Direct Access Storage Device (DASD), Redundant Array of Independent Disks (RAID), Just a Bunch of Disks (JBOD), etc. The control unit may configure one or more logical subsystems (LSSs), where each LSS may be configured to include multiple volumes.
The host system may include a channel subsystem that maintains information to access logical volumes in the control unit. The channel subsystem includes subchannels, which provides state tracking for the execution of the I/O operations issued to a logical volume and provides information on the logical paths connecting the channel subsystem to the control unit and on the unit address of the logical volume on each logical path. The host operating system maintains a unit control block (UCB) providing information on the logical volume and the subchannel number that the channel subsystem uses to access the logical volume. When a control unit supports alias addressing, the unit address on a logical path associated with a logical volume is referred to as a base address. Other unit addresses on a logical path may be configured that are referred to as alias addresses and may be used as an alternate unit address to issue an I/O request to a logical volume. The host operating system can distinguish which unit address are base address and which are alias addresses by self-description information provided to I/O requests issued to the unit address.
In a static implementation, the customer may initially assign aliases to bases via external tools to the control unit and the aliases are used for I/O requests directed to the bases to which they are assigned. A static implementation may also provide a way for a customer or the host operating system to reassign an alias to a new base. When reassignment is performed, the alias provides notification to the host program that it has changed its base assignment. In another implementation, the alias addresses do not have a fixed affinity to a particular base address, and the base address is selected through a command at the beginning of an I/O request. In these implementations, the base addresses that can be selected through the alias address are limited to bases on the same logical subsystem (LSS, also known as control unit image) on the control unit. This allows one alias address to have I/O operations (from different hosts) in progress concurrently.
The host processes the information in the UCB to address an I/O operation to a logical volume. In particular, the host initiates an I/O operation toward a logical volume by initiating a channel program which consists of a series of channel command words (CCWs), each of which may contain a command to be issued to the logical volume.
A base unit address is associated with a logical volume when it is configured on the control unit. After assigning a base address to each logical volume (device), the remaining addresses can be allocated as alias addresses. Depending on the implementation, either the alias has an associated base (static implementation), or the alias has some scope of bases that can be selected by a command issued at the beginning of an I/O operation. The control unit associates a given I/O request issued to a base address or an alias address with one and only one logical volume.
One or more I/O operations can be simultaneously issued to the same logical volume using the base address and one or more alias unit addresses for the logical volume. In this way, the issued I/O requests are all directed to the same logical volume using different addresses, wherein each address may be accessed by the channel subsystem through one or more logical paths. This allows a single host to concurrently execute multiple I/O operations against a single volume. In a static implementation, the number of aliases provided for a base may be set according to the expected or measured number of concurrent I/O requests for the logical volume. In certain cases, only a few aliases may be needed to accommodate network, e.g., Storage Area Network (SAN), traffic for a particular logical volume.
In a dynamic implementation, the number of aliases provided for a set of bases that can be selected through the set of aliases can be set according to the number of concurrent I/O requests for the set of logical volumes. Since the aliases can be dynamically assigned on a per I/O basis, the average number of aliases per volumes is generally significantly less than for static alias assignments.
The host operating system is aware of which subchannels are associated with a base address and which subchannels are associated with an alias addresses. It is also aware of which alias addresses can be used to issue I/O requests to which logical volumes. And it is also aware whether an alias address is static or dynamic. When the alias address is dynamic, the host operating system preprocesses any I/O request by prefixing an appropriate command to the channel program to select the logical volume that the I/O request is being issued to. When the host operating system receives an I/O request for a logical volume, the host program selects one of the subchannels that can be used for the logical volume to issue the I/O request. The host program may use one or more algorithms to select the applicable subchannel. For example, it might use a round robin selection scheme that skips subchannels that are already busy with existing I/O operations. If no subchannels are available, the host operating system queues the I/O request for the logical volume until a subchannel becomes available. Once the I/O operation is issued to the subchannel, the channel subsystem selects a logical path associated with the subchannel to issue the I/O request to the unit address on the control unit associated with the subchannel. Once the I/O request has ended at the logical volume, the control unit presents status to the channel subsystem and the subchannel provides the host program with information describing the completion status of the I/O request.